package service;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ApplicationScoped;
import javax.faces.bean.ManagedBean;

import model.Convenio;
import model.Loja;
import model.Produto;
import model.TabelaTC;
import model.TabelaTaxasComissoesEmprestimo;
import model.Vinculacao;
import util.Util;

@ManagedBean(name = "filterService")
@ApplicationScoped
public class FilterService {

	private List<Produto> produtos;
	private List<Convenio> convenios;
	private List<TabelaTaxasComissoesEmprestimo> tabelasTaxas;
	private List<TabelaTC> tabelasTC;
	private List<Loja> lojas;
	private List<Vinculacao> vinculacoes;

	public FilterService() {

		this.createProdutos();
		this.createConvenios();
		this.createTabelasTaxas();
		this.createTabelasTC();
		this.createLojas();
	}

	public void createProdutos() {

		this.produtos = new ArrayList<Produto>();
		String[] nome = Util.getRandomProduto();

		for (int i = 0; i < nome.length; i++) {
			this.produtos.add(new Produto(Util.getRandomId(), nome[i]));
		}
	}

	public void createConvenios() {

		this.convenios = new ArrayList<Convenio>();
		String[] nome = Util.getRandomConvenio();

		for (int i = 0; i < nome.length; i++) {
			this.convenios.add(new Convenio(Util.getRandomId(), nome[i]));
		}
	}

	public void createTabelasTaxas() {

		this.tabelasTaxas = new ArrayList<TabelaTaxasComissoesEmprestimo>();
		String[] nome = Util.getRandomTabelasTaxas();

		for (int i = 0; i < nome.length; i++) {
			this.tabelasTaxas.add(new TabelaTaxasComissoesEmprestimo(Util
					.getRandomId(), nome[i], null, null, null, null, null,
					null, null, null, null, null, null));
		}
	}

	public void createTabelasTC() {

		this.tabelasTC = new ArrayList<TabelaTC>();
		String[] nome = Util.getRandomTabelasTC();

		for (int i = 0; i < nome.length; i++) {
			this.tabelasTC.add(new TabelaTC(nome[i]));
		}
	}

	public List<Loja> createLojas() {

		this.lojas = new ArrayList<Loja>();
		String[] nome = Util.getRandomLojas();

		for (int i = 0; i < nome.length; i++) {
			this.lojas.add(new Loja(Util.getRandomId(), nome[i]));
		}

		return this.lojas;
	}

	public List<Vinculacao> createVinculacoes(int size) {

		this.vinculacoes = new ArrayList<Vinculacao>();

		for (int i = 0; i < size; i++) {
			this.vinculacoes
					.add(new Vinculacao(Util.getRandomId(), this.getProdutos().get((int) (Math.random() * this.getProdutos().size())),
															this.getConvenios().get((int) (Math.random() * this.getConvenios().size())), 
															this.getTabelasTaxas().get((int) (Math.random() * this.getTabelasTaxas().size())), 
															this.getTabelasTC().get((int) (Math.random() * this.getTabelasTC().size()))));
		}

		return this.vinculacoes;
	}

	public List<Produto> getProdutos() {
		return produtos;
	}

	public void setProdutos(List<Produto> produtos) {
		this.produtos = produtos;
	}

	public List<Convenio> getConvenios() {
		return convenios;
	}

	public void setConvenios(List<Convenio> convenios) {
		this.convenios = convenios;
	}

	public List<TabelaTaxasComissoesEmprestimo> getTabelasTaxas() {
		return tabelasTaxas;
	}

	public void setTabelasTaxas(List<TabelaTaxasComissoesEmprestimo> tabelasTaxas) {
		this.tabelasTaxas = tabelasTaxas;
	}

	public List<TabelaTC> getTabelasTC() {
		return tabelasTC;
	}

	public void setTabelasTC(List<TabelaTC> tabelasTC) {
		this.tabelasTC = tabelasTC;
	}

	public List<Vinculacao> getVinculacoes() {
		return vinculacoes;
	}

	public void setVinculacoes(List<Vinculacao> vinculacoes) {
		this.vinculacoes = vinculacoes;
	}

	public List<Loja> getLojas() {
		return lojas;
	}

	public void setLojas(List<Loja> lojas) {
		this.lojas = lojas;
	}

}
